const { promisePool, Pool } = require('../models/db')

const areaModel = require('../models/areaModel')

const JWT = require('../utils/JWT')

// 导入 bcryptjs 加密包
const bcrypt = require('bcryptjs')

//导入 moment
const moment = require('moment');

const donateRecordService = {
  // 列表
  list: (req, res) => {
    // return
    Pool.query(areaModel.list, function (err, rows) {
      console.log(req.body, 'req.body');
      if (err) {
        return res.codeMsg(err)
      }
      const data = rows.map(item => {
        const created_at = moment(item.created_at, 'D/M/YYYY HH:mm:ss', true)
        const updated_at = moment(item.updated_at, 'D/M/YYYY HH:mm:ss', true)
        const planting_area_tree_id_array = item.planting_area_tree_id_array ? item.planting_area_tree_id_array?.split(',').map(Number) : []
        return {
          ...item,
          created_at: moment(created_at).format('YYYY-MM-DD HH:mm:ss'),
          updated_at: moment(updated_at).format('YYYY-MM-DD HH:mm:ss'),
          planting_area_tree_id_array,
          planting_area_tree_count: planting_area_tree_id_array ? planting_area_tree_id_array.length : 0
        }
      })
      // 2、发送token到客户端（header方式）
      // res.header('Authorization', token)
      return res.send({
        code: 0,
        msg: '成功',
        data: {
          data
        }
      })

      // 登录成功
      // res.codeMsg('登录成功', 0)
    })
  },
  paramsList: (req, res) => {
    // return
    let paramsList = 'select * from planting_area';
    const params = req.search_key
    console.log(params, 'params---');
    // 判断 params 中是否存在 search_key，并且该对象非空
    if (params && Object.keys(params).length > 0) {
      // 构建 WHERE 子句的条件数组
      const conditions = [];

      // 遍历 search_key 对象的每个属性
      for (const key in params) {
        // 获取属性值
        const value = params[key];
        let formattedValue;

        if (key.endsWith('_at') && Array.isArray(value) && value.length === 2) {
          // 如果是 donate_at 属性，并且值是一个包含两个日期对象的数组，则构建时间范围查询条件
          // 将日期字符串转换为 Date 对象
          const startISO = value[0].slice(0, 19);
          const endISO = value[1].slice(0, 19);
          formattedValue = ` BETWEEN '${startISO}' AND '${endISO}'`;
        } else {
          // 否则，使用默认的格式化方法
          // formattedValue = typeof value === 'string' ? ' = ' + `'${value}'` : ' = ' + value;
          formattedValue = typeof value === 'string' ? ` LIKE '%${value}%'` : ` LIKE '%${value}%'`;
        }
        // 添加条件到数组中
        conditions.push(`${key}${formattedValue}`);
      }

      // console.log(conditions, 'conditions');

      // 构建 WHERE 子句
      const whereClause = conditions.length > 0 ? ` where ${conditions.join(' and ')}` : '';
      // console.log(whereClause, 'whereClause');
      // 将 WHERE 子句添加到查询语句中
      paramsList = `${paramsList}${whereClause} LIMIT 10 OFFSET 0`;
      console.log(paramsList, 'paramsList');
      Pool.query(paramsList, function (err, rows) {
        if (err) {
          return res.codeMsg(err)
        }
        // console.log(rows, 'rows');

        const data = rows.map(item => {
          const created_at = moment(item.created_at, 'D/M/YYYY HH:mm:ss', true)
          const updated_at = moment(item.updated_at, 'D/M/YYYY HH:mm:ss', true)
          return {
            ...item,
            created_at: moment(created_at).format('YYYY-MM-DD HH:mm:ss'),
            updated_at: moment(updated_at).format('YYYY-MM-DD HH:mm:ss'),
          }
        })
        // 2、发送token到客户端（header方式）
        return res.send({
          code: 0,
          msg: '成功',
          data: {
            data
          }
        })
      })
    }


  },

  // 插入设置
  add: (req, res) => {
    const params = {
      ...req.body,
      //修改 time 属性的值
      created_at: moment().format('YYYY-MM-DD HH:mm:ss'),
      updated_at: moment().format('YYYY-MM-DD HH:mm:ss'),
    }
    Pool.query(
      areaModel.add,
      // [{ username: username, password: password }],
      [params],
      function (err, rows) {
        console.log(err, 'err');
        console.log(params, 'params');
        if (err) {
          return res.codeMsg(err)
        }

        if (rows.affectedRows !== 1) {
          return res.codeMsg('注册用户失败，请稍后再试！')
        }

        // 注册成功提示
        // res.send({ code: 0, msg: '注册成功！' })
        return res.codeMsg('注册成功！', 0)
      }
    )
  },
  // 更新设置
  update: (req, res) => {
    const params = { ...req.body, updated_at: moment().format('YYYY-MM-DD HH:mm:ss') }
    delete params.planting_area_tree_id_array
    delete params.planting_area_tree_count
    Pool.query(
      areaModel.update,
      [params, req.body.id],
      function (err, rows) {
        console.log(err, 'err');
        if (err) return res.codeMsg(err)

        if (rows.affectedRows !== 1) return res.codeMsg('更新失败！')
        console.log(111);
        return res.codeMsg('更新成功！', 0)
      }
    )
  },
  // 更新设置
  updateUseTree: (req, res) => {
    // delete req.body.planting_tree_ids
    // 接收数据
    const { planting_area_id, planting_tree_ids } = req.body
    // 先执行查询操作
    // 首先执行删除操作
    console.log(planting_area_id, 'planting_area_id');
    // 删除原有的 planting_area_tree 记录
    const deleteSql = 'DELETE FROM planting_area_tree WHERE planting_area_id = ?';
    Pool.query(deleteSql, planting_area_id, function (deleteErr, deleteResult) {
      if (deleteErr) {
        // console.error('Error deleting from planting_area_tree:', deleteErr);
        if (deleteResult.affectedRows !== 1) {
          return res.codeMsg('失败！');
        }
        // 处理删除错误情况
      } else {
        // console.log('Deleted from planting_area_tree:', deleteResult);
        // 收集所有插入操作的 Promise 数组
        const promises = [];
        planting_tree_ids.forEach(ptId => {
          const insertSql = 'INSERT INTO planting_area_tree (planting_area_id, planting_tree_id) VALUES (?, ?)';
          const insertValues = [planting_area_id, ptId];

          // 执行插入操作并将 Promise 添加到数组中
          promises.push(new Promise((resolve, reject) => {
            Pool.query(insertSql, insertValues, function (insertErr, insertResult) {
              if (insertErr) {
                // console.error('Error inserting into planting_area_tree:', insertErr);
                reject('失败！');
              } else {
                resolve('成功！');
              }
            });
          }));
        });

        // 等待所有插入操作完成后发送响应
        Promise.all(promises)
          .then(results => {
            // 如果所有插入操作都成功，则发送成功消息
            return res.codeMsg('更新成功！', 0);
          })
          .catch(errorMessage => {
            // 如果有任何一个插入操作失败，则发送失败消息
            // return res.codeMsg(errorMessage);
            return res.codeMsg('失败');
          });
      }
    });



    //  Pool.query(
    //     areaModel.useTreeList,
    //     [req.body.id],
    //     function (err, rows) {
    //       console.log(err, 'err');
    //       if (err) return res.codeMsg(err)

    //       if (rows.affectedRows !== 1) return res.codeMsg('查询失败！')
    //       // 和原有数据进行比较，多的删，少的插入
    //       if(!planting_area_tree_id_array && rows.length == 0) {
    //         return res.codeMsg('更新成功！', 0)
    //       } else if (!planting_area_tree_id_array) {
    //         // 删除原有
    //       } else if (planting_area_tree_id_array){
    //         const isEqual1 = (arr1, arr2) => {
    //             const sortedArr1 = planting_area_tree_id_array.slice().sort();
    //             const sortedArr2 = rows.slice().sort();
    //             return JSON.stringify(sortedArr1) === JSON.stringify(sortedArr2);
    //         };
    //         if(isEqual1) {
    //          return res.codeMsg('更新成功！', 0)
    //         } else {
    //           // 
    //         }
    //       }
    //       // return res.codeMsg('更新成功！', 0)
    //     }
    // )
    // // 
    // if(!planting_area_tree_id_array) {
    //   // 查询id对应的数据 执行删除操作
    // } else {

    // }
    // console.log(planting_area_tree_id_array, 'planting_area_tree_id_array');
    // req.body.planting_area_tree_id_array = planting_area_tree_id_array
    //   const params = { ...req.body, updated_at: moment().format('YYYY-MM-DD HH:mm:ss')}
    //   Pool.query(
    //     areaModel.updateUseTree,
    //     [params, req.body.id],
    //     function (err, rows) {
    //       console.log(err, 'err');
    //       if (err) return res.codeMsg(err)

    //       if (rows.affectedRows !== 1) return res.codeMsg('更新失败！')
    //       console.log(111);
    //       return res.codeMsg('更新成功！', 0)
    //     }
    //   )
  },

  // 删除设置
  delete: (req, res) => {
    Pool.query(areaModel.delete, [req.body.id], function (err, rows) {
      console.log(err, 'err');
      if (err) return res.codeMsg(err)
      console.log(1);
      if (rows.affectedRows !== 1) return res.codeMsg('您要删除的内存不存在！')
      console.log(2);
      return res.codeMsg('删除成功！', 0)
    })
  },
}

module.exports = donateRecordService
